//package com.wcbtest.dem02.service;
//
//
//import com.wcbtest.dem02.entity.MemoryInfo;
//import com.wcbtest.dem02.entity.ProcessInfo;
//import com.wcbtest.dem02.entity.SshConfig;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.stereotype.Service;
//
//import java.util.ArrayList;
//import java.util.Arrays;
//import java.util.List;
//import java.util.regex.Matcher;
//import java.util.regex.Pattern;
//
//@Service
//public class TopCommandParserService {
//    private static final Logger logger = LoggerFactory.getLogger(TopCommandParserService.class);
//
//    // 更灵活的CPU信息匹配模式
//    private static final Pattern CPU_PATTERN = Pattern.compile(
//        "Cpu\\(s\\):\\s*(\\d+\\.\\d+)%?\\s*us(?:,|\\s)+(\\d+\\.\\d+)%?\\s*sy(?:,|\\s)+" +
//        "(\\d+\\.\\d+)%?\\s*ni(?:,|\\s)+(\\d+\\.\\d+)%?\\s*id(?:,|\\s)+" +
//        "(\\d+\\.\\d+)%?\\s*wa(?:,|\\s)*(?:(\\d+\\.\\d+)%?\\s*hi(?:,|\\s)*)?" +
//        "(?:(\\d+\\.\\d+)%?\\s*si(?:,|\\s)*)?(?:(\\d+\\.\\d+)%?\\s*st)?",
//        Pattern.CASE_INSENSITIVE
//    );
//
//    // 更灵活的内存信息匹配模式
//    private static final Pattern MEM_PATTERN = Pattern.compile(
//        "Mem:\\s*(\\d+)\\s*(\\w*)\\s*total,\\s*(\\d+)\\s*(\\w*)\\s*used,\\s*" +
//        "(\\d+)\\s*(\\w*)\\s*free(?:,\\s*(\\d+)\\s*(\\w*)\\s*buffers)?",
//        Pattern.CASE_INSENSITIVE
//    );
//
//    // 更灵活的交换空间匹配模式
//    private static final Pattern SWAP_PATTERN = Pattern.compile(
//        "Swap:\\s*(\\d+)\\s*(\\w*)\\s*total,\\s*(\\d+)\\s*(\\w*)\\s*used,\\s*" +
//        "(\\d+)\\s*(\\w*)\\s*free(?:,\\s*(\\d+)\\s*(\\w*)\\s*cached)?",
//        Pattern.CASE_INSENSITIVE
//    );
//
//    // 进程信息头部检测
//    private static final Pattern PROCESS_HEADER_PATTERN = Pattern.compile(
//        "^\\s*PID\\s+USER\\s+PR\\s+NI\\s+VIRT\\s+RES\\s+SHR\\s+S\\s+%CPU\\s+%MEM\\s+TIME\\+\\s+COMMAND.*$",
//        Pattern.CASE_INSENSITIVE
//    );
//
//    private final CommandExecutorService commandExecutorService;
//
//    public TopCommandParserService(CommandExecutorService commandExecutorService) {
//        this.commandExecutorService = commandExecutorService;
//    }
//
//    public SystemInfo getSystemInfo(SshConfig sshConfig) throws SshException {
//        String topOutput = commandExecutorService.executeCommand(sshConfig, "top -b -n 1");
//        List<String> lines = Arrays.asList(topOutput.split("\n"));
//
//        SystemInfo systemInfo = new SystemInfo();
//        systemInfo.setCpuInfo(parseCpuInfo(lines));
//        systemInfo.setMemoryInfo(parseMemoryInfo(lines));
//        systemInfo.setProcesses(parseProcesses(lines));
//
//        return systemInfo;
//    }
//
//    private CpuInfo parseCpuInfo(List<String> lines) {
//        CpuInfo cpuInfo = new CpuInfo();
//
//        for (String line : lines) {
//            if (line.toLowerCase().contains("cpu(s):")) {
//                Matcher matcher = CPU_PATTERN.matcher(line);
//                if (matcher.find()) {
//                    cpuInfo.setUser(parseDouble(matcher.group(1)));
//                    cpuInfo.setSystem(parseDouble(matcher.group(2)));
//                    cpuInfo.setNice(parseDouble(matcher.group(3)));
//                    cpuInfo.setIdle(parseDouble(matcher.group(4)));
//                    cpuInfo.setWait(parseDouble(matcher.group(5)));
//                    cpuInfo.setHardwareIrq(parseDouble(matcher.group(6)));
//                    cpuInfo.setSoftwareIrq(parseDouble(matcher.group(7)));
//                    cpuInfo.setSteal(parseDouble(matcher.group(8)));
//                    break;
//                }
//            }
//        }
//
//        return cpuInfo;
//    }
//
//    private MemoryInfo parseMemoryInfo(List<String> lines) {
//        MemoryInfo memoryInfo = new MemoryInfo();
//
//        for (String line : lines) {
//            if (line.toLowerCase().contains("mem:")) {
//                Matcher memMatcher = MEM_PATTERN.matcher(line);
//                if (memMatcher.find()) {
//                    memoryInfo.setTotalMemory(parseLongWithUnit(memMatcher.group(1), memMatcher.group(2)));
//                    memoryInfo.setUsedMemory(parseLongWithUnit(memMatcher.group(3), memMatcher.group(4)));
//                    memoryInfo.setFreeMemory(parseLongWithUnit(memMatcher.group(5), memMatcher.group(6)));
//                    if (memMatcher.group(7) != null && memMatcher.group(8) != null) {
//                        memoryInfo.setBuffers(parseLongWithUnit(memMatcher.group(7), memMatcher.group(8)));
//                    }
//                }
//            }
//
//            if (line.toLowerCase().contains("swap:")) {
//                Matcher swapMatcher = SWAP_PATTERN.matcher(line);
//                if (swapMatcher.find()) {
//                    memoryInfo.setTotalSwap(parseLongWithUnit(swapMatcher.group(1), swapMatcher.group(2)));
//                    memoryInfo.setUsedSwap(parseLongWithUnit(swapMatcher.group(3), swapMatcher.group(4)));
//                    memoryInfo.setFreeSwap(parseLongWithUnit(swapMatcher.group(5), swapMatcher.group(6)));
//                    if (swapMatcher.group(7) != null && swapMatcher.group(8) != null) {
//                        memoryInfo.setCached(parseLongWithUnit(swapMatcher.group(7), swapMatcher.group(8)));
//                    }
//                }
//            }
//        }
//
//        return memoryInfo;
//    }
//
//    private List<ProcessInfo> parseProcesses(List<String> lines) {
//        List<ProcessInfo> processes = new ArrayList<>();
//        boolean processSectionStarted = false;
//
//        for (String line : lines) {
//            if (PROCESS_HEADER_PATTERN.matcher(line).matches()) {
//                processSectionStarted = true;
//                continue;
//            }
//
//            if (processSectionStarted && !line.trim().isEmpty()) {
//                ProcessInfo processInfo = parseProcessLine(line);
//                if (processInfo != null) {
//                    processes.add(processInfo);
//                }
//            }
//        }
//
//        return processes;
//    }
//
//    private ProcessInfo parseProcessLine(String line) {
//        try {
//            String[] parts = line.trim().split("\\s+", 12);
//            if (parts.length < 11) {
//                return null;
//            }
//
//            ProcessInfo process = new ProcessInfo();
//            process.setPid(Integer.parseInt(parts[0]));
//            process.setUser(parts[1]);
//            process.setPr(Integer.parseInt(parts[2]));
//            process.setNi(Integer.parseInt(parts[3]));
//            process.setVirt(parts[4]);
//            process.setRes(parts[5]);
//            process.setShr(parts[6]);
//            process.setS(parts[7]);
//            process.setCpu(Double.parseDouble(parts[8]));
//            process.setMem(Double.parseDouble(parts[9]));
//            process.setTime(parts[10]);
//
//            if (parts.length > 11) {
//                process.setCommand(parts[11]);
//            }
//
//            return process;
//        } catch (Exception e) {
//            logger.warn("无法解析进程行: {}", line, e);
//            return null;
//        }
//    }
//
//    private double parseDouble(String value) {
//        if (value == null || value.trim().isEmpty()) {
//            return 0.0;
//        }
//        try {
//            return Double.parseDouble(value.trim());
//        } catch (NumberFormatException e) {
//            return 0.0;
//        }
//    }
//
//    private long parseLongWithUnit(String value, String unit) {
//        if (value == null || value.trim().isEmpty()) {
//            return 0;
//        }
//
//        long multiplier = 1;
//        if (unit != null) {
//            unit = unit.toLowerCase();
//            if (unit.startsWith("g")) {
//                multiplier = 1024 * 1024 * 1024;
//            } else if (unit.startsWith("m")) {
//                multiplier = 1024 * 1024;
//            } else if (unit.startsWith("k")) {
//                multiplier = 1024;
//            }
//        }
//
//        try {
//            return Long.parseLong(value.trim()) * multiplier;
//        } catch (NumberFormatException e) {
//            return 0;
//        }
//    }
//}